package es.webapp.exiquets.web;

import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import es.webapp.exiquets.domain.entities.User;
import es.webapp.exiquets.domain.entities.UserRole;
import es.webapp.exiquets.domain.webforms.ModificarUsuarioForm;
import es.webapp.exiquets.service.GestorUsuarios;
import es.webapp.exiquets.utils.eXiquetsConstants;
 
@Controller
@RequestMapping(value="/privado/usuarios/*")
public class GestorUsuariosController {
	
	@Autowired
	GestorUsuarios gestorUsuarios;
	
	@RequestMapping(value="/privado/usuarios/modificaUsuario",method = RequestMethod.GET)
	public ModelAndView listaUsuaro(ModelMap model) {
		
		
		org.springframework.security.core.userdetails.User authUser = (org.springframework.security.core.userdetails.User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
		
		User user = gestorUsuarios.getUsuarioPorMail(authUser.getUsername()); 
		
		ModificarUsuarioForm usuario = new ModificarUsuarioForm(user);
		
		ModelAndView vista = new ModelAndView("privado/usuarios/modificaUsuario","user",usuario);
		
        
		return vista;
	}
	
	@RequestMapping(value="/privado/usuarios/modificaUsuario",method = RequestMethod.POST)
	public ModelAndView modificaUsuario(@Valid ModificarUsuarioForm user, BindingResult result) {	
		ModelAndView vista = null;
		User usuario = gestorUsuarios.getUsuarioPorMail(user.getMail()); 
		if(eXiquetsConstants.DELETE_USUARIO_REGISTRADO.equalsIgnoreCase(user.getBotonPulsado())){
			gestorUsuarios.eliminarUsuario(usuario);
			vista = new ModelAndView("redirect:/j_spring_security_logout");
		}else{
			usuario.setMail(user.getMail());
			usuario.setNombre(user.getNombre());
			usuario.setPassword(user.getPassword());
			gestorUsuarios.updateUsuario(usuario);
			vista = new ModelAndView("privado/usuarios/modificaUsuario","user",user);
		}
		
		return vista;
	}

	
}